Skip to content

perf(account-tree-controller): scoped per-wallet sync for AccountTreeController#8929

Draft
hmalik88 wants to merge 7 commits into
mainfrom
hm/mul-1536
Draft

perf(account-tree-controller): scoped per-wallet sync for AccountTreeController#8929
hmalik88 wants to merge 7 commits into
mainfrom
hm/mul-1536

Conversation

@hmalik88
Copy link
Copy Markdown
Contributor

@hmalik88 hmalik88 commented May 29, 2026

Explanation

After auditing performance of the account creation user flows, I observed that calling AccountTreeController.syncWithUserStorage() after a single wallet's state changes (e.g., immediately after an SRP import) iterates every local entropy wallet, fetching wallet metadata + the full groups feature list for each one. When only the newly imported wallet has actually changed, that fanout is wasted bandwidth and slows the perceived "import complete" moment, especially for users with multiple existing wallets.

This PR adds a scoped variant that syncs a single wallet by entropy source ID, leaving the existing full-sync API and behavior untouched. Consumers can swap syncWithUserStorage() for syncWalletWithUserStorage(entropySourceId) at SRP-import call sites to avoid the fanout. The new method is awaitable so sync-then-discover sequencing is preserved at the call site, defers to any in-flight full sync so callers cooperatively wait instead of racing, and does not flip hasAccountTreeSyncingSyncedAtLeastOnce (a scoped sync doesn't satisfy the first-full-sync contract).

References

N/A

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

@hmalik88
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-previews

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.0-preview-074c25661
@metamask-previews/accounts-controller@38.1.2-preview-074c25661
@metamask-previews/address-book-controller@7.1.2-preview-074c25661
@metamask-previews/ai-controllers@0.7.0-preview-074c25661
@metamask-previews/analytics-controller@1.1.0-preview-074c25661
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-074c25661
@metamask-previews/announcement-controller@8.1.0-preview-074c25661
@metamask-previews/app-metadata-controller@2.0.1-preview-074c25661
@metamask-previews/approval-controller@9.0.1-preview-074c25661
@metamask-previews/assets-controller@8.1.0-preview-074c25661
@metamask-previews/assets-controllers@108.2.0-preview-074c25661
@metamask-previews/authenticated-user-storage@2.0.0-preview-074c25661
@metamask-previews/base-controller@9.1.0-preview-074c25661
@metamask-previews/base-data-service@0.1.3-preview-074c25661
@metamask-previews/bridge-controller@73.2.0-preview-074c25661
@metamask-previews/bridge-status-controller@72.0.0-preview-074c25661
@metamask-previews/build-utils@3.0.4-preview-074c25661
@metamask-previews/chain-agnostic-permission@1.6.1-preview-074c25661
@metamask-previews/chomp-api-service@3.1.0-preview-074c25661
@metamask-previews/claims-controller@0.5.2-preview-074c25661
@metamask-previews/client-controller@1.0.1-preview-074c25661
@metamask-previews/compliance-controller@2.0.1-preview-074c25661
@metamask-previews/composable-controller@12.0.1-preview-074c25661
@metamask-previews/config-registry-controller@0.3.2-preview-074c25661
@metamask-previews/connectivity-controller@0.2.0-preview-074c25661
@metamask-previews/controller-utils@12.1.0-preview-074c25661
@metamask-previews/core-backend@6.3.1-preview-074c25661
@metamask-previews/delegation-controller@3.0.1-preview-074c25661
@metamask-previews/earn-controller@12.2.0-preview-074c25661
@metamask-previews/eip-5792-middleware@3.0.4-preview-074c25661
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-074c25661
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-074c25661
@metamask-previews/ens-controller@19.1.3-preview-074c25661
@metamask-previews/eth-block-tracker@15.0.1-preview-074c25661
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-074c25661
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-074c25661
@metamask-previews/foundryup@1.0.1-preview-074c25661
@metamask-previews/gas-fee-controller@26.2.2-preview-074c25661
@metamask-previews/gator-permissions-controller@4.2.0-preview-074c25661
@metamask-previews/geolocation-controller@0.1.3-preview-074c25661
@metamask-previews/json-rpc-engine@10.5.0-preview-074c25661
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-074c25661
@metamask-previews/keyring-controller@26.0.0-preview-074c25661
@metamask-previews/logging-controller@8.0.2-preview-074c25661
@metamask-previews/message-manager@14.1.2-preview-074c25661
@metamask-previews/messenger@1.2.0-preview-074c25661
@metamask-previews/messenger-cli@0.2.0-preview-074c25661
@metamask-previews/money-account-balance-service@1.0.2-preview-074c25661
@metamask-previews/money-account-controller@0.3.1-preview-074c25661
@metamask-previews/money-account-upgrade-controller@2.0.3-preview-074c25661
@metamask-previews/multichain-account-service@10.0.1-preview-074c25661
@metamask-previews/multichain-api-middleware@3.1.2-preview-074c25661
@metamask-previews/multichain-network-controller@3.1.2-preview-074c25661
@metamask-previews/multichain-transactions-controller@7.1.0-preview-074c25661
@metamask-previews/name-controller@9.1.2-preview-074c25661
@metamask-previews/network-controller@32.0.0-preview-074c25661
@metamask-previews/network-enablement-controller@5.2.0-preview-074c25661
@metamask-previews/notification-services-controller@24.1.2-preview-074c25661
@metamask-previews/passkey-controller@2.0.1-preview-074c25661
@metamask-previews/permission-controller@13.1.1-preview-074c25661
@metamask-previews/permission-log-controller@5.1.0-preview-074c25661
@metamask-previews/perps-controller@6.3.0-preview-074c25661
@metamask-previews/phishing-controller@17.2.0-preview-074c25661
@metamask-previews/polling-controller@16.0.6-preview-074c25661
@metamask-previews/preferences-controller@23.1.0-preview-074c25661
@metamask-previews/profile-metrics-controller@3.1.5-preview-074c25661
@metamask-previews/profile-sync-controller@28.1.1-preview-074c25661
@metamask-previews/ramps-controller@14.0.0-preview-074c25661
@metamask-previews/rate-limit-controller@7.0.1-preview-074c25661
@metamask-previews/react-data-query@0.2.1-preview-074c25661
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-074c25661
@metamask-previews/sample-controllers@5.0.1-preview-074c25661
@metamask-previews/seedless-onboarding-controller@10.0.0-preview-074c25661
@metamask-previews/selected-network-controller@26.1.3-preview-074c25661
@metamask-previews/shield-controller@5.1.2-preview-074c25661
@metamask-previews/signature-controller@39.2.3-preview-074c25661
@metamask-previews/snap-account-service@0.2.1-preview-074c25661
@metamask-previews/social-controllers@2.2.1-preview-074c25661
@metamask-previews/storage-service@1.0.1-preview-074c25661
@metamask-previews/subscription-controller@6.1.3-preview-074c25661
@metamask-previews/transaction-controller@66.0.0-preview-074c25661
@metamask-previews/transaction-pay-controller@22.8.0-preview-074c25661
@metamask-previews/user-operation-controller@41.2.3-preview-074c25661
@metamask-previews/wallet@1.0.1-preview-074c25661

@hmalik88 hmalik88 changed the title feat: scoped per-wallet sync for AccountTreeController perf(account-tree-controller): scoped per-wallet sync for AccountTreeController May 30, 2026
@hmalik88
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-previews

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.0-preview-4cca49f54
@metamask-previews/accounts-controller@38.1.2-preview-4cca49f54
@metamask-previews/address-book-controller@7.1.2-preview-4cca49f54
@metamask-previews/ai-controllers@0.7.0-preview-4cca49f54
@metamask-previews/analytics-controller@1.1.0-preview-4cca49f54
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-4cca49f54
@metamask-previews/announcement-controller@8.1.0-preview-4cca49f54
@metamask-previews/app-metadata-controller@2.0.1-preview-4cca49f54
@metamask-previews/approval-controller@9.0.1-preview-4cca49f54
@metamask-previews/assets-controller@8.1.0-preview-4cca49f54
@metamask-previews/assets-controllers@108.2.0-preview-4cca49f54
@metamask-previews/authenticated-user-storage@2.0.0-preview-4cca49f54
@metamask-previews/base-controller@9.1.0-preview-4cca49f54
@metamask-previews/base-data-service@0.1.3-preview-4cca49f54
@metamask-previews/bridge-controller@73.2.0-preview-4cca49f54
@metamask-previews/bridge-status-controller@72.0.0-preview-4cca49f54
@metamask-previews/build-utils@3.0.4-preview-4cca49f54
@metamask-previews/chain-agnostic-permission@1.6.1-preview-4cca49f54
@metamask-previews/chomp-api-service@3.1.0-preview-4cca49f54
@metamask-previews/claims-controller@0.5.2-preview-4cca49f54
@metamask-previews/client-controller@1.0.1-preview-4cca49f54
@metamask-previews/compliance-controller@2.0.1-preview-4cca49f54
@metamask-previews/composable-controller@12.0.1-preview-4cca49f54
@metamask-previews/config-registry-controller@0.3.2-preview-4cca49f54
@metamask-previews/connectivity-controller@0.2.0-preview-4cca49f54
@metamask-previews/controller-utils@12.1.0-preview-4cca49f54
@metamask-previews/core-backend@6.3.1-preview-4cca49f54
@metamask-previews/delegation-controller@3.0.1-preview-4cca49f54
@metamask-previews/earn-controller@12.2.0-preview-4cca49f54
@metamask-previews/eip-5792-middleware@3.0.4-preview-4cca49f54
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-4cca49f54
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-4cca49f54
@metamask-previews/ens-controller@19.1.3-preview-4cca49f54
@metamask-previews/eth-block-tracker@15.0.1-preview-4cca49f54
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-4cca49f54
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-4cca49f54
@metamask-previews/foundryup@1.0.1-preview-4cca49f54
@metamask-previews/gas-fee-controller@26.2.2-preview-4cca49f54
@metamask-previews/gator-permissions-controller@4.2.0-preview-4cca49f54
@metamask-previews/geolocation-controller@0.1.3-preview-4cca49f54
@metamask-previews/json-rpc-engine@10.5.0-preview-4cca49f54
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-4cca49f54
@metamask-previews/keyring-controller@26.0.0-preview-4cca49f54
@metamask-previews/logging-controller@8.0.2-preview-4cca49f54
@metamask-previews/message-manager@14.1.2-preview-4cca49f54
@metamask-previews/messenger@1.2.0-preview-4cca49f54
@metamask-previews/messenger-cli@0.2.0-preview-4cca49f54
@metamask-previews/money-account-balance-service@1.0.2-preview-4cca49f54
@metamask-previews/money-account-controller@0.3.1-preview-4cca49f54
@metamask-previews/money-account-upgrade-controller@2.0.3-preview-4cca49f54
@metamask-previews/multichain-account-service@10.0.1-preview-4cca49f54
@metamask-previews/multichain-api-middleware@3.1.2-preview-4cca49f54
@metamask-previews/multichain-network-controller@3.1.2-preview-4cca49f54
@metamask-previews/multichain-transactions-controller@7.1.0-preview-4cca49f54
@metamask-previews/name-controller@9.1.2-preview-4cca49f54
@metamask-previews/network-controller@32.0.0-preview-4cca49f54
@metamask-previews/network-enablement-controller@5.2.0-preview-4cca49f54
@metamask-previews/notification-services-controller@24.1.2-preview-4cca49f54
@metamask-previews/passkey-controller@2.0.1-preview-4cca49f54
@metamask-previews/permission-controller@13.1.1-preview-4cca49f54
@metamask-previews/permission-log-controller@5.1.0-preview-4cca49f54
@metamask-previews/perps-controller@6.3.0-preview-4cca49f54
@metamask-previews/phishing-controller@17.2.0-preview-4cca49f54
@metamask-previews/polling-controller@16.0.6-preview-4cca49f54
@metamask-previews/preferences-controller@23.1.0-preview-4cca49f54
@metamask-previews/profile-metrics-controller@3.1.5-preview-4cca49f54
@metamask-previews/profile-sync-controller@28.1.1-preview-4cca49f54
@metamask-previews/ramps-controller@14.0.0-preview-4cca49f54
@metamask-previews/rate-limit-controller@7.0.1-preview-4cca49f54
@metamask-previews/react-data-query@0.2.1-preview-4cca49f54
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-4cca49f54
@metamask-previews/sample-controllers@5.0.1-preview-4cca49f54
@metamask-previews/seedless-onboarding-controller@10.0.0-preview-4cca49f54
@metamask-previews/selected-network-controller@26.1.3-preview-4cca49f54
@metamask-previews/shield-controller@5.1.2-preview-4cca49f54
@metamask-previews/signature-controller@39.2.3-preview-4cca49f54
@metamask-previews/snap-account-service@0.2.1-preview-4cca49f54
@metamask-previews/social-controllers@2.2.1-preview-4cca49f54
@metamask-previews/storage-service@1.0.1-preview-4cca49f54
@metamask-previews/subscription-controller@6.1.3-preview-4cca49f54
@metamask-previews/transaction-controller@66.0.0-preview-4cca49f54
@metamask-previews/transaction-pay-controller@22.8.0-preview-4cca49f54
@metamask-previews/user-operation-controller@41.2.3-preview-4cca49f54
@metamask-previews/wallet@1.0.1-preview-4cca49f54

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant